package Model;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*; 
import org.hibernate.annotations.Cascade; 
import org.hibernate.annotations.CascadeType; 
import org.hibernate.annotations.Fetch; 
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="cidade")
@SuppressWarnings ("serial")
public class Cidade implements Serializable
{
    @Id
    @SequenceGenerator( name = "cod_cidade", sequenceName = "cod_cidade_seq", allocationSize = 1 )   
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "cod_cidade" )   
    @Column (name = "cod_cidade")
    private int codCidade;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="cod_estado") 
    @Fetch(FetchMode.SELECT)
    @Cascade(CascadeType.MERGE)
    private Estado estado;

    @Column (name = "nome")
    private String nome;

    @OneToMany(mappedBy="cidade", fetch = FetchType.LAZY)
    @Fetch(FetchMode.SELECT)
    private Collection <Endereco> endereco;
    
    //Construtores
    //Construtor padrao
    public Cidade (){ 
        this.codCidade = 0;
        this.estado = new Estado();
        this.nome = "";
    }
    //Construtor com parametros
    public Cidade (int codCidade, Estado estado, String nome) 
    {           
        this.codCidade = codCidade;
        this.estado = estado;
        this.nome = nome;
    }
    
    //Metodos Get e Set
    public int getCodCidade() {
        return codCidade;
    }
    public void setCodCidade(int codCidade) {
        this.codCidade = codCidade;
    }

    public Estado getEstado() {
        return estado;
    }
    public void setEstado(Estado estado) {
        this.estado = estado;
    }
    
    
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    public Collection getEndereco(){
        return endereco;
    }
    public void setEndereco (Collection endereco){
        this.endereco = endereco;
    }
}